﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using UC.BaseMVVM;

namespace UC.Test.BaseMVVM.BaseModelValidacao
{
    [TestClass]
    public class ComportamentosDaModelBase : BaseTestValidacao
    {
        [TestMethod]
        public void InicializarAValidacaoJaNaInicializacaoDaViewSeEscolhidaEssaOpcaoNaConfiguracaoDaModel()
        {
            // arrange
            var validadorConfig = new ModelBase.ValidadorConfig
                {
                    InicializarModelAutoValidando = true
                };

            var umModelTestDeNegocioMock = new UmModelTesteDeNegocio(typeof(UmModelTesteDeNegocio), validadorConfig);

            // act
            var conteudoInvalidoParaOCampo = string.Empty;
            umModelTestDeNegocioMock.UmaPropriedadeDeCampoDaViewComValidadorObrigatorio = conteudoInvalidoParaOCampo;
            var temErroNaView = umModelTestDeNegocioMock.HasErrors;
            var oModelEstaValido = umModelTestDeNegocioMock.ModelValido;

            // assert
            Assert.IsTrue(temErroNaView);
            Assert.IsFalse(oModelEstaValido);
        }

        [TestMethod]
        public void IniciarAValidacaoDoCampoNoTempoDefinidoNaConfiguracaoDaModel()
        {
            // arrange
            var validadorConfig = new ModelBase.ValidadorConfig
                {
                    TempoDeEsperaParaValidacao = TimeSpan.FromMilliseconds(120)
                };

            var horaAoIniciarValidacao = DateTime.Now;
            var umModelTestDeNegocio = new UmModelTesteDeNegocio(typeof (UmModelTesteDeNegocio), validadorConfig);

            // act
            umModelTestDeNegocio.UmaPropriedadeDeCampoDaViewComValidadorObrigatorio = string.Empty;

            var horaDeInicioDaValidacaoEmPotencial =
                horaAoIniciarValidacao.AddMilliseconds(validadorConfig.TempoDeEsperaParaValidacao.Milliseconds);
            var horaTerminoDaValidacao = DateTime.Now;

            // assert
            Assert.AreEqual(horaDeInicioDaValidacaoEmPotencial.ToShortDateString(), horaTerminoDaValidacao.ToShortDateString());
        }

    }
}
